package Stream.StreamTest06;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 本题综合单列集合,双列集合,键盘输入,Stream流操作
 * <p>
 * 1.键盘录入3个学生信息,存储到学生对象(姓名,年龄).然后添加到ArrayList集合中.
 * 2.键盘录入3个居住地信息,添加到另一个集合ArrayList;
 * 3.把两个list集合中的数据收集到同一个map集合中,键是学生对对象,值是居住地址.
 * 4.要求map集合中不能存在相同的学生信息.并按照学生年龄降序排列
 * 5.使用Stream流输出集合中所有姓张的人信息;
 * <p>
 * **提示**
 * <p>
 * ①想办法将两个list集合中的数据存到一个Map中就行了,   0索引位置的学生对应的地址信息也在0索引位置!!!
 * <p>
 * ②想要排序必须使用TreeMap呢? 还是HashMap呢?
 */

public class StreamTest06 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Student> stu = new ArrayList<>();
        ArrayList<String> address = new ArrayList<>();
        for (int i = 1; i < 4; i++) {
            System.out.println("请输入第" + i + "个学生的姓名");
            String name = scanner.next();

            System.out.println("请输入第" + i + "个学生的年龄");
            int age = scanner.nextInt();

            System.out.println("请输入第" + i + "个学生的地址");
            String addr = scanner.next();

            stu.add(new Student(name, age));
            address.add(addr);
        }

        TreeMap<Student, String> treeMap = new TreeMap<>((o1, o2) -> o2.getAge() - o1.getAge());

        for (int i = 0; i < 3; i++) {
            Student key = stu.get(i);
            String value = address.get(i);

            treeMap.put(key, value);
        }

        Set<Map.Entry<Student, String>> set = treeMap.entrySet().stream()
                .filter(s->s.getKey().getName().startsWith("张"))
                .collect(Collectors.toSet());
        for (Map.Entry<Student, String> s : set) {
            System.out.println(s.getKey()+" "+s.getValue());
        }
    }
}
